// 搜索页面
const app = getApp()
const config = require('../../utils/config.js')
const api = require('../../utils/api.js')

// 最大历史搜索记录数量
const MAX_HISTORY_COUNT = 10

Page({
  data: {
    keyword: '',                // 搜索关键词
    historyKeywords: [],        // 历史搜索关键词
    hotKeywords: [],            // 热门搜索关键词
    showResults: false,         // 是否显示搜索结果
    loading: false,             // 加载状态
    searchResults: [],          // 搜索结果
    page: 1,                    // 当前页码
    pageSize: 10,               // 每页数量
    hasMore: true               // 是否有更多数据
  },
  
  onLoad(options) {
    // 如果有传入的关键词，直接搜索
    if (options.keyword) {
      // 确保关键词是原样的中文，不是URL编码格式
      const keyword = options.keyword;
      console.log('接收到搜索关键词:', keyword);
      
      this.setData({
        keyword: keyword
      })
      this.onSearch()
    }
    
    // 获取历史搜索记录
    this.getHistoryKeywords()
    
    // 获取热门搜索关键词
    this.getHotKeywords()
  },
  
  // 获取历史搜索记录
  getHistoryKeywords() {
    const historyKeywords = wx.getStorageSync('historyKeywords') || []
    this.setData({
      historyKeywords
    })
  },
  
  // 获取热门搜索关键词
  getHotKeywords() {
    // 可以调用API获取热门搜索词，这里使用模拟数据
    this.setData({
      hotKeywords: ['手机', '笔记本', '女装', '男鞋', '耳机', '零食', '护肤品']
    })
    
    // 实际API调用可以像这样：
    /*
    api.get(config.API.SEARCH.HOT_KEYWORDS)
      .then(res => {
        this.setData({
          hotKeywords: res.data || []
        })
      })
      .catch(err => {
        console.error('获取热门搜索词失败:', err)
      })
    */
  },
  
  // 输入关键词变化
  onKeywordInput(e) {
    this.setData({
      keyword: e.detail.value
    })
  },
  
  // 清除关键词
  clearKeyword() {
    this.setData({
      keyword: '',
      showResults: false
    })
  },
  
  // 使用历史关键词
  useHistoryKeyword(e) {
    const keyword = e.currentTarget.dataset.keyword
    this.setData({
      keyword
    })
    this.onSearch()
  },
  
  // 清除历史搜索记录
  clearHistory() {
    wx.showModal({
      title: '提示',
      content: '确定要清除所有历史搜索记录吗？',
      success: (res) => {
        if (res.confirm) {
          wx.removeStorageSync('historyKeywords')
          this.setData({
            historyKeywords: []
          })
        }
      }
    })
  },
  
  // 执行搜索
  onSearch() {
    const keyword = this.data.keyword.trim()
    if (!keyword) {
      wx.showToast({
        title: '请输入搜索关键词',
        icon: 'none'
      })
      return
    }
    
    // 保存搜索记录
    this.saveSearchHistory(keyword)
    
    // 重置搜索状态
    this.setData({
      showResults: true,
      loading: true,
      searchResults: [],
      page: 1,
      hasMore: true
    })
    
    // 执行搜索请求
    this.fetchSearchResults()
  },
  
  // 保存搜索记录
  saveSearchHistory(keyword) {
    let historyKeywords = wx.getStorageSync('historyKeywords') || []
    
    // 如果已存在，则移除
    const index = historyKeywords.indexOf(keyword)
    if (index !== -1) {
      historyKeywords.splice(index, 1)
    }
    
    // 添加到开头
    historyKeywords.unshift(keyword)
    
    // 限制数量
    if (historyKeywords.length > MAX_HISTORY_COUNT) {
      historyKeywords = historyKeywords.slice(0, MAX_HISTORY_COUNT)
    }
    
    // 保存到本地存储
    wx.setStorageSync('historyKeywords', historyKeywords)
    
    // 更新数据
    this.setData({
      historyKeywords
    })
  },
  
  // 获取搜索结果
  fetchSearchResults() {
    const { keyword, page, pageSize } = this.data
    
    // 构建请求参数
    const params = {
      keyword,
      page,
      pageSize
    }
    
    console.log('搜索请求参数:', params)
    
    // 使用专门的搜索API，如果定义了的话，否则使用通用商品列表API
    const searchApi = config.API.PRODUCT.SEARCH || config.API.PRODUCT.LIST
    
    // 调用搜索API
    api.get(searchApi, params)
      .then(res => {
        console.log('搜索结果原始数据:', res)
        
        // 处理搜索结果
        let searchResults = res.data && res.data.list ? res.data.list : []
        const total = res.data && res.data.total ? res.data.total : 0
        
        // 如果没有结果，尝试其他格式解析
        if (searchResults.length === 0 && res.data) {
          if (Array.isArray(res.data)) {
            searchResults = res.data;
          } else if (typeof res.data === 'object' && Object.keys(res.data).length > 0) {
            // 尝试将对象转为数组
            searchResults = Object.values(res.data);
          }
        }
        
        // 处理搜索结果，确保有必要的字段
        searchResults = searchResults.map(item => {
          const result = { ...item };
          // 确保有ID
          if (!result.id && result.productId) {
            result.id = result.productId;
          }
          // 确保有封面图
          if (!result.cover && result.image) {
            result.cover = result.image;
          } else if (!result.cover && result.coverImage) {
            result.cover = result.coverImage;
          } else if (!result.cover) {
            result.cover = '/static/images/default_product.png';
          }
          // 确保有名称
          if (!result.name && result.title) {
            result.name = result.title;
          }
          // 确保有价格
          if (!result.price && result.price !== 0) {
            result.price = '暂无价格';
          }
          return result;
        });
        
        console.log('处理后的搜索结果:', searchResults)
        
        // 判断是否还有更多数据
        const hasMore = page * pageSize < total
        
        // 如果是加载更多，则拼接数据
        if (page > 1) {
          this.setData({
            searchResults: [...this.data.searchResults, ...searchResults],
            loading: false,
            hasMore
          })
        } else {
          // 首次加载替换数据
          this.setData({
            searchResults,
            loading: false,
            hasMore
          })
        }
        
        // 如果没有结果并且是首次加载，尝试使用备用接口或加载模拟数据
        if (searchResults.length === 0 && page === 1) {
          this.tryFallbackSearch();
        }
      })
      .catch(err => {
        console.error('搜索失败:', err)
        
        // 显示错误提示
        wx.showToast({
          title: '搜索失败，将显示推荐商品',
          icon: 'none'
        })
        
        // 使用备用方式搜索
        this.tryFallbackSearch();
      })
  },
  
  // 备用搜索方案 - 使用推荐商品作为搜索结果
  tryFallbackSearch() {
    console.log('尝试使用备用搜索方案');
    
    // 尝试调用推荐商品API作为搜索结果
    api.get(config.API.PRODUCT.RECOMMEND)
      .then(res => {
        console.log('备用搜索结果:', res);
        
        let products = [];
        if (res.data) {
          if (Array.isArray(res.data)) {
            products = res.data;
          } else if (res.data.list && Array.isArray(res.data.list)) {
            products = res.data.list;
          } else if (typeof res.data === 'object') {
            products = Object.values(res.data);
          }
        }
        
        // 处理产品数据
        products = products.map(product => {
          const processedProduct = { ...product };
          
          // 确保每个产品都有id字段
          if (!processedProduct.id && processedProduct.productId) {
            processedProduct.id = processedProduct.productId;
          }
          
          // 确保每个产品都有cover字段
          if (!processedProduct.cover && processedProduct.image) {
            processedProduct.cover = processedProduct.image;
          } else if (!processedProduct.cover && processedProduct.coverImage) {
            processedProduct.cover = processedProduct.coverImage;
          } else if (!processedProduct.cover) {
            processedProduct.cover = '/static/images/default_product.png';
          }
          
          // 确保有名称
          if (!processedProduct.name && processedProduct.title) {
            processedProduct.name = processedProduct.title;
          }
          
          // 确保有价格
          if (!processedProduct.price && processedProduct.price !== 0) {
            processedProduct.price = '暂无价格';
          }
          
          return processedProduct;
        });
        
        if (products.length > 0) {
          // 如果获取到了推荐商品，使用它们作为搜索结果
          this.setData({
            searchResults: products,
            loading: false,
            hasMore: false
          });
          
          // 显示提示
          wx.showToast({
            title: '为您显示推荐商品',
            icon: 'none',
            duration: 2000
          });
        } else {
          // 如果还是没有结果，使用模拟数据
          this.useMockSearchResults();
        }
      })
      .catch(err => {
        console.error('获取备用商品数据失败:', err);
        // 如果API调用失败，使用模拟数据
        this.useMockSearchResults();
      });
  },
  
  // 使用模拟数据
  useMockSearchResults() {
    console.log('使用模拟搜索结果数据');
    const mockProducts = [
      {
        id: 1,
        name: '高品质无线蓝牙耳机',
        cover: '/static/images/default_product.png',
        price: 199,
        sales: 1024
      },
      {
        id: 2,
        name: '智能手机 8+128GB',
        cover: '/static/images/default_product.png',
        price: 2999,
        sales: 856
      },
      {
        id: 3,
        name: '轻薄笔记本电脑',
        cover: '/static/images/default_product.png',
        price: 5299,
        sales: 432
      },
      {
        id: 4,
        name: '智能手表防水运动款',
        cover: '/static/images/default_product.png',
        price: 899,
        sales: 765
      }
    ];
    
    // 使用关键词筛选模拟数据
    const keyword = this.data.keyword.toLowerCase();
    const filteredProducts = mockProducts.filter(product => 
      product.name.toLowerCase().includes(keyword)
    );
    
    this.setData({
      searchResults: filteredProducts.length > 0 ? filteredProducts : mockProducts,
      loading: false,
      hasMore: false
    });
    
    // 如果没有匹配的模拟数据，显示提示
    if (filteredProducts.length === 0) {
      wx.showToast({
        title: '未找到匹配商品，显示推荐商品',
        icon: 'none',
        duration: 2000
      });
    }
  },
  
  // 加载更多
  loadMore() {
    if (this.data.loading || !this.data.hasMore) return
    
    this.setData({
      page: this.data.page + 1,
      loading: true
    })
    
    this.fetchSearchResults()
  },
  
  // 点击商品
  onProductClick(e) {
    const id = e.currentTarget.dataset.id
    wx.navigateTo({
      url: `/pages/product/detail/detail?id=${id}`
    })
  },
  
  // 添加到购物车
  handleAddToCart(e) {
    const item = e.currentTarget.dataset.item
    
    // 检查登录状态
    const token = wx.getStorageSync('token')
    if (!token) {
      wx.showModal({
        title: '提示',
        content: '请先登录',
        success: (res) => {
          if (res.confirm) {
            wx.navigateTo({
              url: '/pages/my/index'
            })
          }
        }
      })
      return
    }
    
    // 显示加载提示
    wx.showLoading({
      title: '添加中...',
      mask: true
    })
    
    // 调用添加购物车API
    api.post(config.API.CART.ADD, {
      productId: item.id,
      quantity: 1
    })
    .then(res => {
      wx.hideLoading()
      
      if (res.code === 200) {
        wx.showToast({
          title: '已加入购物车',
          icon: 'success'
        })
        
        // 更新购物车角标
        if (typeof app.updateCartBadge === 'function') {
          app.updateCartBadge()
        }
      } else {
        wx.showToast({
          title: res.message || '添加失败',
          icon: 'none'
        })
      }
    })
    .catch(err => {
      wx.hideLoading()
      
      wx.showToast({
        title: '添加失败，请重试',
        icon: 'none'
      })
    })
  }
}) 